在現今的資訊時代,文字資料無所不在,從社交媒體、新聞報導到學術研究,文字都是我們最主要的資訊來源。然而,要讓電腦能夠理解並處理這些文字資料,我們首先必須將其分割成更小、更結構化的單位,這就是所謂的「分詞」。
為什麼要分詞呢?因為單純的文字通常是非常不結構化的,而這對於資料分析或是電腦處理來說,是個巨大的挑戰。這時,分詞的角色就變得尤為重要。
詳細一點解釋,文本資料並不像數字或表格,它沒有固定的格式或結構。透過分詞,我們可以將這些文本資料轉換成一種更結構化的形式,使其更容易被分析和處理。例如,一篇文章可以被分割成句子,句子又可以被分割成單詞或詞組。這樣的層次結構,使我們能夠更深入地了解文本資料的內容和結構。
從人的觀點來看,分詞後的文本資料更易於閱讀和理解。而從機器的角度,分詞讓文本資料更容易被處理和分析。例如,當我們想要計算某個單詞在文本中出現的頻率,或是想要了解哪些單詞常常一起出現時,分詞就成了首要的步驟。此外,許多自然語言處理的技術,如文字雲、情感分析或主題模型,都需要先進行分詞。
分詞,英文稱作「Tokenization」,指的是將長文字或句子分割成單詞、詞組或其他有意義的單位的過程。例如,句子「我愛台灣」經過分詞後,可能會被分割成「我」、「愛」和「台灣」三個單詞。
自然語言處理是電腦科學和人工智慧領域中,專注於讓電腦能夠理解和生成人類語言的一門學科。而分詞是自然語言處理的基礎步驟之一。只有當我們將文字資料分割成單詞或詞組,電腦才能更有效地進行語法分析、情感分析、機器翻譯等高階任務。因此,分詞在自然語言處理中擔任著不可或缺的角色。
這種方法主要依賴語言學的規則來進行分詞。例如,中文中的「,」和「。」常常用來分隔句子,而英文則可能使用空格來分隔單詞,這種差異就是不同語言中的單字、句子成形規則不同,我自己當然是最熟英文跟中文,其他語言沒有涉獵就不敢亂講太多。
通常,基於規則的分詞會有一套預先定義的規則,並按照這些規則來分割文本。雖然這種方法相對簡單,但可能不適合所有的文本或語言,特別是當文本中存在大量俚語、新詞或縮寫時。像是幾年前流行的藍瘦香菇、無言薯條,就要整句一起看,要不然統計發現欸怎麼一堆香菇?這樣其實沒有真正捕捉到意義。
這種方法主要是透過分析大量的文本資料,來了解哪些詞組或單詞常常一起出現。透過這些統計資料,可以推測出可能的詞組邊界。例如,「中信兄弟」這個詞組在許多文本中經常一起出現,所以系統可能會將其識別為一個詞組,而不是分開為「中信」和「兄弟」。這種方法特別適用於那些沒有固定語法規則或大量新詞的語言。
混合型分詞結合了基於規則和統計的方法,旨在充分利用兩種方法的優點。它可能首先使用規則進行初步的分詞,然後再使用統計方法進行微調,或者反之。這種方法旨在提供更高的準確率和適應性,特別是在面對多變和複雜的文本資料時。
分詞流程牽涉到的不只有利用規則和統計分詞而已,若在預處理上(pre-processing)上多下功夫,將可以大幅提升分詞品質;分詞後也可以適當篩選結果,這樣一來,將分詞結果應用到後續分析時,也能提取更多洞見。
我們同樣運用總統演說的資料,來展示分詞流程!
library(tidytext)
library(tidyverse)
df_speech_clean <- read_csv("data/df_speech_clean.csv")
df_speech_clean %>% glimpse()
## Rows: 24
## Columns: 5
## $ id <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24
## $ text <chr> "大會主席、各位貴賓、各位親愛的父老兄弟姐妹:\n今天是中華民國八十六年國慶日,海內外同胞用熱烈…
## $ title <chr> "總統蒞臨中華民國八十六年國慶大會致詞", "總統蒞臨中華民國八十七年國慶大會致詞", "總統蒞臨中華…
## $ date <date> 1997-10-15, 1998-10-14, 1999-10-13, 2000-10-18, 2001-10-17, 2002-10-16, 2003-10-15, 2004-10-13…
## $ president <chr> "李登輝", "李登輝", "李登輝", "陳水扁", "陳水扁", "陳水扁", "陳水扁", "陳水扁", "陳水扁", "陳…
df_speech_sample <- df_speech_clean %>% select(text) %>% head(1)
以中文和英文語料來說,至少會有這些任務:
這些步驟主要會用stringr
搭配dplyr
完成任務。